
͂߂

@̃Tv̓[U[AvP[VŃXNvg̓[`𗘗pɂĕKvȃ\[X̂łB
Tvɂ
	{XNvg
܂܂Ă܂B


XNvg̓[`ɂ

@compiler.exe oCi[f[^ǂݍŉ͂AXNvgŝłB
̃Tvł͊{XNvgɉuprintvƂIWiXNvgǉĂ܂B

{XNvgƂ͕ϐ̑lZAifɂ⃉xɂWvAt[̍XV~AIȂǂ̐䕶
悻XNvg𗘗pȂKvƎv鏈̂łB


t@C\

	sample?
		eTvvWFNg
	
	tool
		RpC̃Zbg
		compiler.exe	RpCst@C. XNvg̃RpCAXNvgg table_vaiss.h̏o͂s
		mlc.def			RpC̃IvVlȂǂ̕ۑt@C

eTv̍\
	\[V / vWFNg
	analyzer.sln		VS2005\[V
	analyzer.vcproj		VS2005vWFNg

	{\[X
	main.cpp			C[` XNvgoCi[f[^ǂŉ̓[`ɂ邾̂
	stdafx.h			ʃCN[hA`̃wb_[

	TvƂȂ̓[` ̃tH_̃\[XRs[ĕKvȌėp
	script\
		JobInfo.cpp		Wu\[X
		JobInfo.h		Wuwb_[
		vaiss.cpp		gXNvg̓\[X
		vaiss.h			Tṽwb_[
		table_vaiss.h	compiler.exe ɂďo͂t@C. XNvgg鎞͂̃t@CXV
		class_vaiss.h	compiler.exe ɂďo͂t@C. XNvgg鎞͂̃t@CXV
		mlc.ini			XNvgݒt@C. XNvgg鎞͂̃t@CҏW

	͊NX ʏ킱̃tH_̃t@C͐擪̃AvŗLҏWȂ. pɂ̂܂܎Ă
	analyzer\
		AnalyzerBase.cpp	̓[`̊ƓXNvg
		AnalyzerBase.h
		fpc.cpp				Zp֘A
		fpc.h
		register.h			ϐ̊

	 stdafx.h, analyzer\ ͊esampleŋpĂ܂

	eXg
	sample\
		exec??.bat		eXgob`
		sample??.mlc	eXgXNvg. ̃t@C compiler.exe ŃRpC
		sample??.bin	XNvgRpCoCi[f[^. ̃t@C analyzer.exe œǂ܂
		analyzer??.exe	̓vO


XNvg̓[`

@ƂȂ̓NXpNX쐬AIWĩXNvgǉ܂B
	analyzer/AnalyzerBase.h : class CAnalyzerBase

Tvł CVaiss ƂNX쐬Ă܂B
	sample/vaiss.h : class CVaiss : private CAnalyzerBase

ƊgɕĂ̂͂P̃AvP[VŐp^[̃XNvgғꍇ
(j[֘ÃXNvgƃViI֘AXNvgŕʂ̃XNvgZbg(mlc.iniݒt@C)𓮍삳ꍇ)
ɊeXɊ{R}hgݍ܂pł悤ɂ邽߂̂̂łB

Tvł print ƂIWiXNvgǉĂ܂B
	sample/vaiss.cpp : Bool	CVaiss::scr_com_print()


ϐ̗p

@XNvgŕϐ𗘗p߂ɂ͉̓[`ΉĂKv܂(Tvł͖Ή)B

CRegisterNXpNX
	sample/vaiss.h : class CVsRegister : public CRegister
쐬IWi̓NX CVaiss Œ`܂B
	sample/vaiss.h : 	CVsRegister	m_cReg;			///< WX^.

p CVsRegister ɎۂɃWX^̒li[̈mۂĂ܂B
	sample/vaiss.h : 	Int32	m_iSystem[ 256 ];

z֐ɏ㏑鎖ŃXNvg瑀삳悤ɂȂ܂B
	Int32	CVsRegister::ReadRegister( CFPC::REGISTER_DATA *_pReg ){	
		return m_iSystem[ _pReg->codeL ];
	}
	void	CVsRegister::WriteRegister( CFPC::REGISTER_DATA *_pReg, const UInt32 _uDat ){
		m_iSystem[ _pReg->codeL ] = _uDat;
	}

ǂ̕ϐɃANZX邩̓XNvgݒt@C
	compiler/mlc.ini : 	int(0x0001:0)	DISP_W
̐ݒɂ܂B

XNvgȉ̂悤ɑ삷
	DISP_W = 123

	_pReg->codeH <- 0x00
	_pReg->codeL <- 0x01
	_uDat        <- 123
Ɗi[ ReadRegister, WriteRegister Ă΂܂B

	/// WX^QƗp
	typedef struct {
		Int8		codeL;
		Int8		codeH;
		Int16		offset;
	}REGISTER_DATA;

codeH ̓ANZẌ𕪂ꍇp܂B

	switch( _pReg->codeH ){
		case 0:
			m_iSystem[ _pReg->codeL ] = _uDat;
			break;
		case 1:
			m_iLocal00[ _pReg->codeL ] = _uDat;
		   :

	typedef struct {
		Int16		code;
		Int16		offset;
	}REGISTER_DATA;
	m_iSystem[ _pReg->code ] = _uDat;
̂悤ɂĂ肠܂B

m_iSystem vO瑀삷鎖 vO <-> XNvg ԂŃf[^肷鎖\łB


XNvgR}hǉ菇

1. XNvgݒt@C mlc.ini ҏW

	@ZNV [COMMAND] ̖ɒ`ǉ܂B

	#define	SCR_COM_PRINT				0x0014	//	0	8,0
	̎sɈȉ̃R}hǉĂ݂܂B

	#define	SCR_COM_INPUT				0x0014	//	0	8,0

	R}h "input"B
	ݒt@C
	PREFIX			=scr_com_
	 SCR_COM_ ܂łvOLqp̃vtBbNXł鎖w肵Ă܂B

	R[hɓ 0x0014 ͂̂܂܁B// ȍ~̍ŏ 0  ""Aʏ 0 ȊOw肷鎖͂ȂłB
	 8,0 ͈łB8 ̓WX^B0 ͏I[ӖKt܂B

	input	iReg

	̂悤ɈɕϐPwłR}hɂȂ܂B


2. Kvȃt@Co

	compiler.exe NAݒt@Cɐقǂ mlc.ini ݒ肳Ă鎖mF

	j[uҏWv->[t@CRo[g]IAu}NR[hÉԍɁv{^܂B

	قǂ̂܂܃Rs[ mlc.ini  0x0014  0x0015 ɏĂ܂B
	R[hŒ肵ꍇȂǂ͎łȂ蓮Ŕԍݒ肵ĂB

	Ɂuvg^Cv錾\[Xóv{^܂B
	uComplite...ṽEBhEo琬łB
	
	RpCƓtH_Ɉȉ̃t@CǉĂ܂B
	table_vaiss.h
	class_vaiss.h
	function.cpp

	̂ table_vaiss.h  class_vaiss.h  sample tH_̓t@Cɏ㏑Rs[܂B

	function.cpp ɂ͒ǉXNvgR}h̃ev[g\[Xo͂Ă܂B
	JĈԉ
	Bool	CVaiss::scr_com_input()
	̊֐o͂Ă܂B
	̊֐Rs[ sample/vaiss.cpp  scr_com_print ̉Ƀy[Xg܂B

	̎_ analyzer.sln \[V̓rhł͂łBG[oȂmF܂傤B


3. @\()̒ǉ

	ۂ̏֐ scr_com_input Lq܂B
	 inputR}h́ulL[{[h͂vƂ̂z肵܂B
	C scanf łB
	Ȃ̂ł̂܂ scanf \[XɋLq܂B

	Bool	CVaiss::scr_com_input()
	{
		DEBUG_SCR_COM_TRACE( "SCR_COM_INPUT", 8 );	//!< fobO\pAKvȂꍇ͏OK.
		
		Int32				dat;
		CFPC::REGISTER_DATA	reg;					//!< WX^\.
		
		scanf( "%d", &dat );						///< ۂ̏.
		
		dat = regist_register( &reg );				//!< WX^擾.  8 w肵͂Ŏ擾܂.
													//!<  dat ɂ̓XNvgŎw肵ϐ̒lĂ܂. ͎gp܂.
		set_register( &reg, dat );					//!< scanf œ͂ꂽlXNvgϐɃZbg܂. ŃXNvg󂯎悤ɂȂ܂.
		
		return FALSE;								//!< It[i߂Kv͂Ȃ̂ FALSE.
	}

	ȉ̂悤ȃXNvgLqăRpCĂ݂܂B
	input	data_j
	print	data_j

	̓vOs DOSvvgŒ~Ă܂Bscanf ̓͂҂Ă̂ŐlĂ݂܂B
	s print œ͂l\ĂΐłB


